package org.ala.tiktools.rpc.plugin.rate_limiter;

import org.ala.tiktools.rpc.plugin.node.NodeKey;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

/**
 * 限流器
 * <p>  与method绑定。每个method持有1个引用（通过引用可实现多个method共享一个限流）
 *
 * @author ala
 * @date 2025-04-04 18:17
 */
public interface IRateLimiter extends ApplicationContextAware {
    /**
     *  空实现
     */
    public static final IRateLimiter NULL = new IRateLimiter() {
        @Override
        public long limit(Object[] args, NodeKey key) {
            return 0;
        }
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        }
    };


    /**
     *  限流接口
     *  <p> 如果<=0说明当前不限流
     *  <p> 如果>0说明要等待的毫秒数（主线程等待）
     *  @param args 请求参数
     */
    long limit(Object[] args, NodeKey key);
}
